package app.controllers;

import app.models.Produto;
import app.services.FornecedorService;
import app.services.LogService;
import app.services.ProdutoService;
import app.util.Constants;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;

@Resource
public class ProdutoController extends Controller{
	
    private Result result;
    private ProdutoService service;
    private FornecedorService fornecedorService;
    private Validator validator;
    private LogService logService;
    
    public ProdutoController(Result result, ProdutoService service, FornecedorService fornecedorService, Validator validator, LogService logService) {
        this.result = result;
        this.service = service;
        this.fornecedorService = fornecedorService;
        this.validator = validator;
        this.logService = logService;
    }

    @Get("/produto")
    public void index() {
    	result.include("produtos", service.findAll());
    	result.include("ultimosProdutos", service.findLastProdutos());
    }
    
	@Get("/produto/new")
	public void form() {
		result.include("fornecedores", fornecedorService.findAll());
	}
	
	@Post("/produto/save")
	public void save(Produto produto) {
		produto = service.replaceCommaForPoint(produto);
		
		validator.validate(produto);
		
		validator.onErrorForwardTo(this).form();
		
		service.create(produto);
		
		logService.createLog(Constants.NEW_PRODUTO + produto.getId());
		
		result.forwardTo(this).index();
	}
	
	@Get("/produto/{id}/edit")
	public void edit(Long id) {
		result.include("produto", service.find(id));
		result.include("fornecedores", fornecedorService.findAll());
	}
	
	@Post("/produto/update")
	public void update(Produto produto) {
		produto = service.replaceCommaForPoint(produto);
		
		validator.validate(produto);
		
		validator.onErrorForwardTo(this).edit(produto.getId());
		
		service.update(produto);
		
		logService.createLog(Constants.UPDATE_PRODUTO + produto.getId());
		
		this.result.forwardTo(this).index();
	}
    
}
